package case4

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func Test() {

	fmt.Println("🎯示例四：定义模型并让Gorm为其创建对应的数据表,实现 TableName() 方法来覆盖默认表结构名")

	db, err := mysqlConnect()
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(db)
	if err := db.AutoMigrate(&Dogv4{}); err != nil {
		fmt.Println("创建表结构失败：", err)
		return
	}

	fmt.Println("创建表结构成功...")
}

// 初始化连接
func mysqlConnect() (*gorm.DB, error) {
	url := "root:123456@tcp(127.0.0.1:3306)/case1?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(url), &gorm.Config{})
	if err != nil {
		fmt.Println("连接失败：", err)
		return nil, fmt.Errorf("连接失败：", err)
	}
	fmt.Println("连接成功...")
	return db, nil
}

// 创建表结构
type Dogv4 struct {
	ID       string `gorm:"primaryKey;type:varchar(50)"`
	UserName string `gorm:"type:varchar(20)"`
	Age      int    `gorm:"type:int(3)"`
	Sex      bool   `gorm:"type:tinyint(1)"`
}

// 实现 TableName() 方法覆盖gorm默认生成表名
func (d *Dogv4) TableName() string {
	return "dogv4"
}
